
console.log(Rx);
let count = 0
//first rxjs
Rx.Observable
	.fromEvent(document.getElementById('root'), 'click') // 註冊監聽
	.take(1) // 只取一次
	.subscribe(console.log);
//---------------------------------------------------

// 列举同步异步代码执行
let observable = Rx.Observable
	.create(function(observer) {
		observer.next('Jerry'); // RxJS 4.x 以前的版本用 onNext
		observer.next('Anna');
		setTimeout(() => {
			observer.next('RxJS 30 days!');
		}, 30)
	})
console.log('start');
// 訂閱這個 observable	
observable.subscribe(function(value) {
	console.log(value);
})
console.log('end');
/* ----------------------------------------------------------- */
/* 	Rxjs的核心理念
	Functional Programming 重要特性
	Functional Programming 都是表达式(Expression) 不会是陈述式(Statement)。
	基本区分表达式与陈述式：
	表达式 是一个运算过程，一定会有返回值，例如执行一个function
	陈述式则是表现某个行为，例如一个赋值给一个变数

	Pure function 是指一个function 给予相同的参数，永远会回传相同的返回值，并且没有任何显著的副作用(Side Effect)
	Side Effect 是指一个function 做了跟本身运算返回值没有关系的事，比如说修改某个全域变数，或是修改传入参数的值，甚至是执行 console.log 都算是Side Effect。
	Functional Programming 强调没有Side Effect，也就是function 要保持纯粹，只做运算并返回一个值，没有其他额外的行为。
*/

/* 
	Functional Programming 优势
	可读性高
	当我们透过一系列的函式封装资料的操作过程，程式码能变得非常的简洁且可读性极高，例如下面的例子
	例如： 
	[9, 4].concat([8, 7]) // 合併陣列
      .sort()  // 排序
      .filter(x => x > 5) // 過濾出大於 5 的
	可维护性高
	因为Pure function 等特性，执行结果不依赖外部状态，且不会对外部环境有任何操作，使Functional Programming 能更好的除错及撰写单元测试。

	易于并行/平行处理
	Functional Programming 易于做并行/平行(Concurrency/Parallel)处理，因为我们基本上只做运算不碰I/O，再加上没有Side Effect 的特性，所以较不用担心deadlock 等问题。
*/